// 线性插值抽象类，求给定x坐标对应的y在折线段上的值，需要判断边界情况
/// 线性插值类，实现了Line接口，用于求给定x坐标对应的y在折线段上的值
/// 构造函数参数：
/// - [startX]: 折线段的起始点x坐标
/// - [startY]: 折线段的起始点y坐标
/// - [endX]: 折线段的结束点x坐标
/// - [endY]: 折线段的结束点y坐标
/// 方法参数：
/// - [x]: 给定的x坐标
/// 返回值：
/// - 给定x坐标对应的y在折线段上的值
abstract class Line {
  double interpolate(double x);
}

class LinearLine implements Line {
  final double startX, startY, endX, endY;
  LinearLine(this.startX, this.startY, this.endX, this.endY);
  @override
  double interpolate(double x) {
    if (x <= startX) return startY;
    if (x >= endX) return endY;
    return startY + (endY - startY) * (x - startX) / (endX - startX);
  }
}
